package com.jl15988.mybatispluskit.join.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jl15988.mybatispluskit.join.wrapper.JoinLambdaWrapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 基础关联查询 Mapper 接口
 * 扩展 MyBatis-Plus 的 BaseMapper，提供关联查询功能
 * 
 * @param <T> 实体类型
 * @author Jalon
 * @since 2025/1/1
 */
public interface BaseJoinMapper<T> extends BaseMapper<T> {
    
    /**
     * 根据 Lambda 关联查询包装器查询列表
     * 
     * @param joinLambdaWrapper Lambda 关联查询包装器
     * @return 查询结果列表
     */
    List<T> selectJoinLambdaList(@Param("ew") JoinLambdaWrapper<T> joinLambdaWrapper);
    
    /**
     * 根据 Lambda 关联查询包装器查询单条记录
     * 
     * @param joinLambdaWrapper Lambda 关联查询包装器
     * @return 查询结果
     */
    T selectJoinLambdaOne(@Param("ew") JoinLambdaWrapper<T> joinLambdaWrapper);
    
    /**
     * 根据 Lambda 关联查询包装器查询记录数
     * 
     * @param joinLambdaWrapper Lambda 关联查询包装器
     * @return 记录数
     */
    Long selectJoinLambdaCount(@Param("ew") JoinLambdaWrapper<T> joinLambdaWrapper);
    
    /**
     * 根据 Lambda 关联查询包装器查询 Map 列表
     * 用于查询多表字段组合结果
     * 
     * @param joinLambdaWrapper Lambda 关联查询包装器
     * @return Map 列表结果
     */
    List<Map<String, Object>> selectJoinLambdaMaps(@Param("ew") JoinLambdaWrapper<T> joinLambdaWrapper);
} 